package malagaAcoge.controller.daos;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import malagaAcoge.model.entities.Familiar;
import malagaAcoge.model.entities.Informacionfamiliar;
import malagaAcoge.model.entities.Situacionalojamiento;
import malagaAcoge.utils.JPAUtils;

public class InformacionFamiliarDao {
	private static JPAUtils jpaUtils;
	protected static EntityManager em;

	public InformacionFamiliarDao() {
		jpaUtils = new JPAUtils();

	}
	public static void createInformacionfamiliar(Informacionfamiliar informacionFamiliar) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(informacionFamiliar);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createInformacionfamiliar:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

	public static void updateInformacionfamiliar(Informacionfamiliar informacionFamiliar) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(informacionFamiliar);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo updateInformacionfamiliar:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}
	public static void createFamiliar(Familiar familiar) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(familiar);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createFamiliar:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}
	public static void deleteFamiliar(Familiar familiar) {
		try {
			em = jpaUtils.getEntityManager();
			int id = familiar.getIdFamiliar();
			familiar = em.find(Familiar.class, id);
			em.getTransaction().begin();
			em.remove(familiar);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo deleteFamiliar:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}
	public static Informacionfamiliar findInformacionByExpediente(
			int idExpediente) {
		Informacionfamiliar informacionfamiliar = null;
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Informacionfamiliar) FROM Informacionfamiliar informacionfamiliar WHERE informacionfamiliar.expedienteBean.idExpediente= :valor")
					.setParameter("valor", idExpediente);
			informacionfamiliar = (Informacionfamiliar) q.getSingleResult();
		}catch (NoResultException e) {
			System.out.println("No hay datos de informacion familiar.");
		} 
		catch (Exception e) {
			System.out.println("Error en metodo findInformacionByExpediente");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return informacionfamiliar;
	}
	public static List<Familiar> findFamiliaresByidInformacion(
			int idExpediente) {
		List<Familiar> familiares = new ArrayList<Familiar>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Familiar) FROM Familiar familiar WHERE familiar.informacionfamiliar.idinformacionFamiliar= :valor")
					.setParameter("valor", idExpediente);
			familiares = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("No hay familiares.");
		} 
		catch (Exception e) {
			System.out.println("Error en metodo findFamiliaresByidInformacion");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return familiares;
	}
	
}
